package com.zb.utils;

import cn.hutool.core.util.NumberUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import java.math.BigDecimal;
import java.text.NumberFormat;

/**
 * 数值工具类
 * @Author WEN
 * @Date 2024/3/31 0031
 **/
public class ZbNumberUtil {
    private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance();
    // 默认精确到小数后两位
    private static final int NUMBER_SCALE = 2;

    /**
     * 保留小数
     * @param number 数值
     * @param scale 保留的位数
     * @return
     */
    public static String getPercentage(double number, int scale) {
        NUMBER_FORMAT.setMaximumFractionDigits(scale);
        return NUMBER_FORMAT.format(number);
    }


    /**
     * 保留小数
     * @param number 数值
     * @return
     */
    public static String getPercentage(double number) {
        NUMBER_FORMAT.setMaximumFractionDigits(NUMBER_SCALE);
        return NUMBER_FORMAT.format(number);
    }

    /**
     * 获取百分比
     * @param v1 被除数
     * @param v2 除数
     * @param scale 精确小数位数
     * @return
     */
    public static String getPercentage(Number v1, Number v2, int scale) {
        if (null == v1 || null == v2) {
            return "0";
        }
        if (v2.intValue() == 0) {
            return "0";
        }
        NUMBER_FORMAT.setMaximumFractionDigits(scale);
        BigDecimal div = NumberUtil.div(v1, v2, scale);
        if (div.floatValue() == 0) {
            return "0";
        }
        return NUMBER_FORMAT.format(div.multiply(new BigDecimal("100"))) + "%";
    }

    /**
     * 获取百分比，默认精确到小数后两位
     * @param v1
     * @param v2
     * @return
     */
    public static String getPercentage(String v1, String v2) {
        if (StringUtils.isBlank(v1) || StringUtils.isBlank(v2)) {
            return "0";
        }
        if (NumberUtil.isNumber(v1) || NumberUtil.isNumber(v2)) {
            return "0";
        }
        return getPercentage(NumberUtil.parseNumber(v1), NumberUtil.parseNumber(v2), NUMBER_SCALE);
    }

    /**
     * 获取百分比，默认精确到小数后两位
     * @param v1
     * @param v2
     * @return
     */
    public static String getPercentage(Integer v1, Integer v2) {
        if (null == v1 || null == v2) {
            return "0";
        }
        return getPercentage(v1, v2, NUMBER_SCALE);
    }
}
